﻿using System;
using System.Collections.Generic;
using PublicTransportEnabler.net.DataModel;
using PublicTransportEnabler.net.Enum;
using PublicTransportEnabler.net.Model;
using Location = PublicTransportEnabler.net.Model.Location;

namespace PublicTransportEnabler.net.Contract
{
    public interface INetworkProvider
    {
        NetworkId Id();

        bool HasCapabilities(IEnumerable<Capability> capabilities);

        DepartureMonitorRequest QueryNearbyStations(Location location, int maxDistance, int maxStations);

        DepartureMonitorRequest QueryDepartures(int stationId, int maxDepartures, bool equivs);

        StopFinderRequest AutocompleteStations(string constraint);

        IEnumerable<Product> DefaultProducts();

        TripRequest QueryConnections(Location from, Location via, Location to, DateTime date, bool dep,
                int numConnections, List<Product> products, WalkSpeed walkSpeed, Accessibility accessibility,
                HashSet<Option> options);

        QueryConnectionsResult QueryMoreConnections(IQueryConnectionsContext context, bool later, int numConnections);

        Style LineStyle(String line);

        PublicTransportEnabler.net.Model.Point[] GetArea();
    }
}